    <script type="text/javascript">
      3.4.3 Null类型
            Null 类型是第二个只有一个值的数据类型，这个特殊的值是 null。从逻辑角度来看，null 值表
            示一个空对象指针，而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因，如下面
            的例子所示：
            var car = null;
            alert(typeof car); // "object"
      3. NaN
            NaN，即非数值（Not a Number）是一个特殊的数值，这个数值用于表示一个本来要返回数值的操作数
            未返回数值的情况（这样就不会抛出错误了）。例如，在其他编程语言中，任何数值除以 0都会导致错误，
            从而停止代码执行。但在 ECMAScript中，任何数值除以 0会返回 NaN①，因此不会影响其他代码的执行。
            NaN 本身有两个非同寻常的特点。首先，任何涉及 NaN 的操作（例如 NaN/10）都会返回 NaN，这
            个特点在多步计算中有可能导致问题。其次，NaN 与任何值都不相等，包括 NaN 本身。例如，下面的代
            码会返回 false：
            alert(NaN == NaN); //false
            针对 NaN 的这两个特点，ECMAScript 定义了 isNaN()函数。这个函数接受一个参数，该参数可以
            是任何类型，而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个值之后，会尝试
            将这个值转换为数值。某些不是数值的值会直接转换为数值，例如字符串"10"或 Boolean 值。而任何
            不能被转换为数值的值都会导致这个函数返回 true。请看下面的例子：
            alert(isNaN(NaN)); //true
            alert(isNaN(10)); //false（10 是一个数值）
            alert(isNaN("10")); //false（可以被转换成数值 10）
            alert(isNaN("blue")); //true（不能转换成数值）
            alert(isNaN(true)); //false（可以被转换成数值 1）
      4. Number()、parseInt()和 parseFloat() 数值转换
            Number()转换字符串到数字
            parseInt()转换字符串到整数
            parseFloat()转换字符串到浮点数   这个应该包含parseInt的功能
      3. 转换为字符串 toString() String()
            要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的 toString()方法（第
            5 章将讨论这个方法的特点）。这个方法唯一要做的就是返回相应值的字符串表现。来看下面的例子：
            var age = 11;
            var ageAsString = age.toString(); // 字符串"11"
            var found = true;
            var foundAsString = found.toString(); // 字符串"true
            还可以使用转型函数 String()，这个
            函数能够将任何类型的值转换为字符串。String()函数遵循下列转换规则：
             如果值有 toString()方法，则调用该方法（没有参数）并返回相应的结果；
             如果值是 null，则返回"null"；
             如果值是 undefined，则返回"undefined"。
            var value1 = 10;
            var value2 = true;
            var value3 = null;
            var value4;
            alert(String(value1)); // "10"
            alert(String(value2)); // "true"
            alert(String(value3)); // "null"
            alert(String(value4)); // "undefined"
      3.6.8 with语句
            with 语句的作用是将代码的作用域设置到一个特定的对象中。with 语句的语法如下：
            with (expression) statement;
            定义 with 语句的目的主要是为了简化多次编写同一个对象的工作，如下面的例子所示：
            var qs = location.search.substring(1);
            var hostName = location.hostname;
            var url = location.href;
            上面几行代码都包含 location 对象。如果使用 with 语句，可以把上面的代码改写成如下所示：
            with(location){
             var qs = search.substring(1);
             var hostName = hostname;
             var url = href;
            }
      4.1.4 检测类型 typeof
            要检测一个变量是不是基本数据类型？第 3 章介绍的 typeof 操作符是最佳的工具。说得更具体一
            点，typeof 操作符是确定一个变量是字符串、数值、布尔值，还是 undefined 的最佳工具。如果变
            量的值是一个对象或 null，则 typeof 操作符会像下面例子中所示的那样返回"object"：
            var s = "Nicholas";
            var b = true;
            var i = 22;
            var u;
            var n = null;
            var o = new Object();
            alert(typeof s); //string
            alert(typeof i); //number
            alert(typeof b); //boolean
            alert(typeof u); //undefined
            alert(typeof n); //object
            alert(typeof o); //object
            提供了 instanceof 操作符，其语法如下所示：
            result = variable instanceof constructor
            如果变量是给定引用类型（根据它的原型链来识别；第 6 章将介绍instanceof 操作符就会返回 true。请看下面的例子：
            alert(person instanceof Object); // 变量 person 是 Object 吗？
            alert(colors instanceof Array); // 变量 colors 是 Array 吗？
            alert(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗？
      3.6.6 label语句
            使用 label 语句可以在代码中添加标签，以便将来使用。以下是 label 语句的语法：
            label: statement
            下面是一个示例：
            start: for (var i=0; i < count; i++) {
              alert(i);
            }
            这个例子中定义的 start 标签可以在将来由 break 或 continue 语句引用。加标签的语句一般都
            要与 for 语句等循环语句配合使用。
    </script>

    <script type="text/javascript">//字符串 String
      3. 字符串位置方法 indexOf(),lastIndexOf()
            有两个可以从字符串中查找子字符串的方法：indexOf()和 lastIndexOf()。这两个方法都是从
            一个字符串中搜索给定的子字符串，然后返子字符串的位置（如果没有找到该子字符串，则返回-1）。
            这两个方法的区别在于：indexOf()方法从字符串的开头向后搜索子字符串，而 lastIndexOf()方法
            是从字符串的末尾向前搜索子字符串。还是来看一个例子吧。
            var stringValue = "hello world";
            alert(stringValue.indexOf("o")); //4
            alert(stringValue.lastIndexOf("o")); //7

      4. trim()方法
            ECMAScript 5 为所有字符串定义了 trim()方法。这个方法会创建一个字符串的副本，删除前置及
            后缀的所有空格，然后返回结果。例如：
            var stringValue = " hello world ";
            var trimmedStringValue = stringValue.trim();
            alert(stringValue); //" hello world "
            alert(trimmedStringValue); //"hello world"
            由于 trim()返回的是字符串的副本，所以原始字符串中的前置及后缀空格会保持不变。支持这个
            方法的浏览器有 IE9+、Firefox 3.5+、Safari 5+、Opera 10.5+和 Chrome。此外，Firefox 3.5+、Safari 5+
            和 Chrome 8+还支持非标准的 trimLeft()和 trimRight()方法，分别用于删除字符串开头和末尾的空格。

      5. 字符串大小写转换方法 toLocaleUpperCase()toUpperCase()toLocaleLowerCase()toLowerCase()
            接下来我们要介绍的是一组与大小写转换有关的方法。ECMAScript 中涉及字符串大小写转换的方
            法有 4 个：toLowerCase()、toLocaleLowerCase()、toUpperCase()和 toLocaleUpperCase()。
            其中，toLowerCase()和 toUpperCase()是两个经典的方法，借鉴自 java.lang.String 中的同名
            方法。而 toLocaleLowerCase()和 toLocaleUpperCase()方法则是针对特定地区的实现。对有些地
            区来说，针对地区的方法与其通用方法得到的结果相同，但少数语言（如土耳其语）会为 Unicode 大小
            写转换应用特殊的规则，这时候就必须使用针对地区的方法来保证实现正确的转换。以下是几个例子。
            var stringValue = "hello world";
            alert(stringValue.toLocaleUpperCase()); //"HELLO WORLD"
            alert(stringValue.toUpperCase()); //"HELLO WORLD"
            alert(stringValue.toLocaleLowerCase()); //"hello world"
            alert(stringValue.toLowerCase()); //"hello world"
            StringTypeCaseMethodExample01.htm
            以上代码调用的 toLocaleUpperCase()和 toUpperCase()都返回了"HELLO WORLD"，就像调用
            toLocaleLowerCase()和 toLowerCase()都返回"hello world"一样。一般来说，在不知道自己的
            代码将在哪种语言环境中运行的情况下，还是使用针对地区的方法更稳妥一些。

      2. 字符串操作方法 slice() substr()和 substring()
            提供了三个基于子字符串创建新字符串的方法：slice()、substr()和 substring()。
            这三个方法都会返回被操作字符串的一个子字符串，而且也都接受一或两个参数。第一个参数指定子字
            符串的开始位置，第二个参数（在指定的情况下）表示子字符串到哪里结束。具体来说，slice()和
            substring()的第二个参数指定的是子字符串最后一个字符后面的位置。而 substr()的第二个参数指
            定的则是返回的字符个数。如果没有给这些方法传递第二个参数，则将字符串的长度作为结束位置。与
            concat()方法一样，slice()、substr()和 substring()也不会修改字符串本身的值——它们只是
            返回一个基本类型的字符串值，对原始字符串没有任何影响。请看下面的例子。
            var stringValue = "hello world";
            alert(stringValue.slice(3)); //"lo world"
            alert(stringValue.substring(3)); //"lo world"
            alert(stringValue.substr(3)); //"lo world"
            alert(stringValue.slice(3, 7)); //"lo w"
            alert(stringValue.substring(3,7)); //"lo w"
            alert(stringValue.substr(3, 7)); //"lo worl"

      3.最后一个与模式匹配有关的方法是 split()
            这个方法可以基于指定的分隔符将一个字符串分割成
            多个子字符串，并将结果放在一个数组中。分隔符可以是字符串，也可以是一个 RegExp 对象（这个方
            法不会将字符串看成正则表达式）。split()方法可以接受可选的第二个参数，用于指定数组的大小，
            以便确保返回的数组不会超过既定大小。请看下面的例子。
            var colorText = "red,blue,green,yellow";
            var colors1 = colorText.split(","); //["red", "blue", "green", "yellow"]
            var colors2 = colorText.split(",", 2); //["red", "blue"]
            var colors3 = colorText.split(/[^\,]+/); //["", ",", ",", ",", ""]
          （注: split() 等于php中的 explode() ; join() 等于php中的 implode()）


    </script>

    <script type="text/javascript">//数组 Array()
      5.2.5 重排序方法 reverse()和 sort()
            数组中已经存在两个可以直接用来重排序的方法：reverse()和 sort()。有读者可能猜到了，
            reverse()方法会反转数组项的顺序。请看下面这个例子。
            var values = [1, 2, 3, 4, 5];
            values.reverse();
            alert(values); //5,4,3,2,1

            sort()方法比较的也是字符串，如下所示。
            var values = [0, 1, 5, 10, 15];
            values.sort();
            alert(values); //0,1,10,15,5

            sort()方法可以接收一个比较函数作为参
            function compare(value1, value2) {
             if (value1 < value2) {
             return -1;
             } else if (value1 > value2) {
             return 1;
             } else {
             return 0;
             }
            }
            var values = [0, 1, 5, 10, 15];
            values.sort(compare);
            alert(values); //0,1,5,10,15

      5.2.9 归并方法 reduce()和 reduceRight()
            还新增了两个归并数组的方法：reduce()和 reduceRight()。这两个方法都会迭
            代数组的所有项，然后构建一个最终返回的值。其中，reduce()方法从数组的第一项开始，逐个遍历
            到最后。而 reduceRight()则从数组的最后一项开始，向前遍历到第一项。
            这两个方法都接收两个参数：一个在每一项上调用的函数和（可选的）作为归并基础的初始值。传
            图灵社区会员 StinkBC(StinkBC@gmail.com) 专享 尊重版权
            98 第 5 章 引用类型
            给 reduce()和 reduceRight()的函数接收 4 个参数：前一个值、当前值、项的索引和数组对象。这
            个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上，因此第
            一个参数是数组的第一项，第二个参数就是数组的第二项。
            使用 reduce()方法可以执行求数组中所有值之和的操作，比如：
            var values = [1,2,3,4,5];
            var sum = values.reduce(function(prev, cur, index, array){
             return prev + cur;
            });
            alert(sum); //15

            方法	描述
            concat()	连接两个或更多的数组，并返回结果。
            join()	把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
            pop()	删除并返回数组的最后一个元素
            push()	向数组的末尾添加一个或更多元素，并返回新的长度。
            reverse()	颠倒数组中元素的顺序。
            shift()	删除并返回数组的第一个元素
            slice()	从某个已有的数组返回选定的元素
            sort()	对数组的元素进行排序
            splice()	删除元素，并向数组添加新元素。
            toSource()	返回该对象的源代码。
            toString()	把数组转换为字符串，并返回结果。
            toLocaleString()	把数组转换为本地数组，并返回结果。
            unshift()	向数组的开头添加一个或更多元素，并返回新的长度。
            valueOf()	返回数组对象的原始值

            array.push()//后面增加
            array.concat()//连接函数
            array.pop()//后面拿出
            array.shift()//前面拿出
            array.slice()//返回一个新的数组，包含从 start 到 end （不包括该元素）的 arrayObject 中的元素。-1最后一个
            array.forEach()//遍历无返回
            array.map()//遍历有返回

    </script>

    <script type="text/javascript">//函数
      5.5.5 函数属性和方法 apply()和 call()
            事实上，传递参数并非 apply()和 call()真正的用武之地；它们真正强大的地方是能够扩充函数
            赖以运行的作用域。下面来看一个例子。
            window.color = "red";
            var o = { color: "blue" };
            function sayColor(){
             alert(this.color);
            }
            sayColor(); //red
            sayColor.call(this); //red
            sayColor.call(window); //red
            sayColor.call(o); //blue
    </script>



    <script>//html5以前
    	var html = document.documentElement; //取得对<html>的引用

    childNodes ,firstChild
		alert(html === document.childNodes[0]); //true 
		alert(html === document.firstChild); //true 

	appendChild()
		var returnedNode = someNode.appendChild(newNode);

	insertBefore()
		//插入后成为最后一个子节点
		returnedNode = someNode.insertBefore(newNode, null); 
		alert(newNode == someNode.lastChild); //true 
		//插入后成为第一个子节点
		var returnedNode = someNode.insertBefore(newNode, someNode.firstChild); 
		alert(returnedNode == newNode); //true 
		alert(newNode == someNode.firstChild); //true 
		//插入到最后一个子节点前面
		returnedNode = someNode.insertBefore(newNode, someNode.lastChild); 
		alert(newNode == someNode.childNodes[someNode.childNodes.length-2]); //true 

	document.title document.URL document.domain ocument.referrer
		var originalTitle = document.title; //取得文档标题
		var url = document.URL;//取得完整的 URL
		document.title = "New page title"; //设置文档标题
		var domain = document.domain; //取得域名
		var referrer = document.referrer; //取得来源页面的 URL

	getElementById()和 getElementsByTagName()
		var images = document.getElementsByTagName("img");
		alert(images.length); //输出图像的数量
		alert(images[0].src); //输出第一个图像元素的 src 特性
		alert(images.item(0).src); //输出第一个图像元素的 src 特性

	getAttribute()	setAttribute() removeAttribute()
		var div = document.getElementById("myDiv"); 
		alert(div.getAttribute("id")); //"myDiv" 
		div.setAttribute("id", "someOtherId"); 
		div.removeAttribute("class"); 

	document.createElement()	document.createTextNode()
		var div = document.createElement("div"); //创建一个<div>元素。
		var textNode = document.createTextNode("<strong>Hello</strong> world!"); //

	querySelector()方法
		querySelector()方法接收一个 CSS 选择符，返回与该模式匹配的第一个元素，如果没有找到匹
		配的元素，返回 null。请看下面的例子。

	querySelectorAll()方法
		querySelectorAll()方法接收的参数与 querySelector()方法一样，都是一个 CSS 选择符，但
		返回的是所有匹配的元素而不仅仅是一个元素。这个方法返回的是一个 NodeList 的实例

    </script>

    <script>//html5
    1. getElementsByClassName()方法
		HTML5 添加的 getElementsByClassName()方法是最受人欢迎的一个方法，可以通过 document
		对象及所有 HTML 元素调用该方法。这个方法最早出现在 JavaScript 库中，是通过既有的 DOM 功能实
		现的，而原生的实现具有极大的性能优势
		var selected = document.getElementById("myDiv").getElementsByClassName("selected");

	2. classList 属性
		在操作类名时，需要通过 className 属性添加、删除和替换类名。因为 className 中是一个字
		符串，所以即使只修改字符串一部分，也必须每次都设置整个字符串的值。比如，以下面的 HTML 代
		码为例
		<div class="bd user disabled">...</div> 
		//删除"disabled"类
		div.classList.remove("disabled"); 
		//添加"current"类
		div.classList.add("current"); 
		//切换"user"类
		div.classList.toggle("user"); 
		//确定元素中是否包含既定的类名
		if (div.classList.contains("bd") && !div.classList.contains("disabled")){ 
		 //执行操作
		) 
		//迭代类名
		for (var i=0, len=div.classList.length; i < len; i++){ 
		 doSomething(div.classList[i]); 
		}

	3. document.activeElement document.hasFocus() //获取焦点元素，是否有焦点元素
		var button = document.getElementById("myButton"); 
		button.focus(); 
		alert(document.activeElement === button); //true 

		var button = document.getElementById("myButton"); 
		button.focus(); 
		alert(document.hasFocus()); //true 

		1. readyState 属性
			IE4 最早为 document 对象引入了 readyState 属性。然后，其他浏览器也都陆续添加这个属性，
			最终 HTML5 把这个属性纳入了标准当中。Document 的 readyState 属性有两个可能的值：
			 loading，正在加载文档；
			 complete，已经加载完文档。
			使用 document.readyState 的最恰当方式，就是通过它来实现一个指示文档已经加载完成的指
			示器。在这个属性得到广泛支持之前，要实现这样一个指示器，必须借助 onload 事件处理程序设置一
			个标签，表明文档已经加载完毕。document.readyState 属性的基本用法如下。
			if (document.readyState == "complete"){ 
			 //执行操作
			}
			支持 readyState 属性的浏览器有 IE4+、Firefox 3.6+、Safari、Chrome 和 Opera 9+。

		2. 兼容模式
			自从 IE6 开始区分渲染页面的模式是标准的还是混杂的，检测页面的兼容模式就成为浏览器的必要
			功能。IE 为此给 document 添加了一个名为 compatMode 的属性，这个属性就是为了告诉开发人员浏
			览器采用了哪种渲染模式。就像下面例子中所展示的那样，在标准模式下，document.compatMode 的
			值等于"CSS1Compat"，而在混杂模式下，document.compatMode 的值等于"BackCompat"。
			if (document.compatMode == "CSS1Compat"){ 
			 alert("Standards mode"); 
			} else { 
			 alert("Quirks mode"); 
			} 
			后来，陆续实现这个属性的浏览器有 Firefox、Safari 3.1+、Opera 和 Chrome。最终，HTML5 也把
			这个属性纳入标准，对其实现做出了明确规定

		11.3.4 字符集属性
			HTML5 新增了几个与文档字符集有关的属性。其中，charset 属性表示文档中实际使用的字符集，
			也可以用来指定新字符集。默认情况下，这个属性的值为"UTF-16"，但可以通过<meta>元素、响应头
			部或直接设置 charset 属性修改这个值。来看一个例子。
			alert(document.charset); //"UTF-16" 
			document.charset = "UTF-8"; 
			另一个属性是 defaultCharset，表示根据默认浏览器及操作系统的设置，当前文档默认的字符集
			应该是什么。如果文档没有使用默认的字符集，那 charset 和 defaultCharset 属性的值可能会不一
			样，例如：
			if (document.charset != document.defaultCharset){ 
			 alert("Custom character set being used."); 
			} 
			通过这两个属性可以得到文档使用的字符编码的具体信息，也能对字符编码进行准确地控制。运行
			适当的情况下，可以保证用户正常查看页面或使用应用。
			支持 document.charset 属性的浏览器有 IE、Firefox、Safari、Opera 和 Chrome。支持
			document.defaultCharset 属性的浏览器有 IE、Safari 和 Chrome。
		1. innerHTML 属性

    </script>
